package com.tarena.lbs.user.service.impl;

import com.tarena.lbs.base.protocol.pager.PageResult;
import com.tarena.lbs.user.dao.repository.AdminRepository;
import com.tarena.lbs.user.dao.repository.UserGroupRepository;
import com.tarena.lbs.user.pojo.param.UserGroupParam;
import com.tarena.lbs.user.pojo.po.UserGroupPO;
import com.tarena.lbs.user.pojo.vo.UserGroupVO;
import com.tarena.lbs.user.service.UserGroupService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
@Slf4j
public class UserGroupServiceImpl implements UserGroupService {

    @Autowired
    private UserGroupRepository userGroupRepository;

    @Autowired
    private AdminRepository adminRepository;


//    @Override
//    public Result<Long> saveUserGroup(UserGroupParam userGroupParam) {
//        try {
//            // 1. 获取登录信息 token
//            String token = tokenService.getTokenFromRequest();
//            if (!StringUtils.hasText(token)) {
//                log.error("用户未登录");
//                return Result.failure(ErrorCode.SERVER_ERROR);
//            }
//
//            // 2. 解析token获取用户信息id
//            Long userId = tokenService.getUserIdFromToken(token);
//            if (userId == null) {
//                return Result.failure(ErrorCode.SERVER_ERROR.getMsg(),"");
//            }
//
//            // 3. 判断用户权限（这里简单判断，实际根据业务需求）
//            if (!tokenService.hasPermission(token, "user_group:write")) {
//                return Result.failure(ErrorCode.SERVER_ERROR);
//            }
//
//            // 4. 获取用户信息（商家ID和用户状态）
//            AdminPO admin = adminRepository.getAdminByUserId(userId);
//            if (admin == null) {
//                return Result.failure("用户信息不存在");
//            }
//
//            if (admin.getStatus() != 1) {
//                return Result.failure("用户状态异常");
//            }
//
//            Long businessId = admin.getBusinessId();
//            if (businessId == null) {
//                return Result.failure("商家信息不存在");
//            }
//
//            // 5. 创建UserGroupPO
//            UserGroupPO userGroupPO = new UserGroupPO();
//
//            // 6. 设置参数
//            BeanUtils.copyProperties(userGroupParam, userGroupPO);
//            userGroupPO.setBusinessId(businessId);
//            userGroupPO.setCreateUserId(userId);
//            userGroupPO.setUpdateUserId(userId);
//
//            // 设置默认状态
//            if (userGroupPO.getStatus() == null) {
//                userGroupPO.setStatus(1); // 默认启用
//            }
//
//            // 7. 保存到数据库
//            Integer result = userGroupRepository.saveUserGroup(userGroupPO);
//
//            if (result > 0) {
//                return Result.success(userGroupPO.getId());
//            } else {
//                return Result.failure("保存用户组失败");
//            }
//
//        } catch (Exception e) {
//            log.error("保存用户组异常", e);
//            return Result.failure("系统异常: " + e.getMessage());
//        }
//    }

//    @Override
//    public Result<UserGroupVO> getUserGroupById(Long id) {
//        try {
//            UserGroupPO userGroupPO = userGroupRepository.getUserGroupById(id);
//            if (userGroupPO == null) {
//                return Result.failure("用户组不存在");
//            }
//
//            UserGroupVO userGroupVO = new UserGroupVO();
//            BeanUtils.copyProperties(userGroupPO, userGroupVO);
//
//            return Result.success(userGroupVO);
//        } catch (Exception e) {
//            log.error("查询用户组异常", e);
//            return Result.failure("系统异常: " + e.getMessage());
//        }
//    }


//    @Override
//    public Result<List<UserGroupVO>> getUserGroupsByBusinessId(Long businessId) {
//        try {
//            List<UserGroupPO> userGroupPOs = userGroupRepository.getUserGroupsByBusinessId(businessId);
//            List<UserGroupVO> userGroupVOs = userGroupPOs.stream().map(po -> {
//                UserGroupVO vo = new UserGroupVO();
//                BeanUtils.copyProperties(po, vo);
//                return vo;
//            }).collect(Collectors.toList());
//
//            return Result.success(userGroupVOs);
//        } catch (Exception e) {
//            log.error("查询用户组列表异常", e);
//            // 使用构造函数创建 Result，保持泛型类型
//            return new Result<>(500, "系统异常: " + e.getMessage(), null);
//        }
//    }
//
//    @Override
//    public PageResult<UserGroupPO> getUserGroupPageListByBusinessId(Integer businessId) {
//        log.debug("Service层处理商家ID: {} 的用户分组查询", businessId);
//
//        UserGroupQuery query = new UserGroupQuery();
//        query.setBusinessId(businessId);
//
//        // 如果UserGroupQuery没有分页参数，需要手动设置
//        // query.setPageNo(1); // 默认第一页
//        // query.setPageSize(10); // 默认每页10条
//
//        PageResult<UserGroupPO> pageResult = userGroupRepository.pagesList(query);
//
//        List<UserGroupVO> voList = pageResult.getObjects().stream().map(po -> {
//            UserGroupVO vo = new UserGroupVO();
//            BeanUtils.copyProperties(po, vo);
//            return vo;
//        }).collect(Collectors.toList());
//
//        // 创建新的PageResult对象，手动设置分页参数
//        PageResult<UserGroupVO> result = new PageResult<>();
//        result.setPageNo(pageResult.getPageNo());
//        result.setPageSize(pageResult.getPageSize());
//        result.setObjects(voList);
//        result.setTotal(pageResult.getTotal());
//
//        // TODO UserGroupVO的result返回值转PO
//        PageResult<UserGroupPO> objectPageResult = new PageResult<>();
//        // 设置分页参数
//        objectPageResult.setPageNo(result.getPageNo());
//        objectPageResult.setPageSize(result.getPageSize());
//        objectPageResult.setTotal(result.getTotal());
//
//        // 将VO列表转换回PO列表
//        List<UserGroupPO> poList = result.getObjects().stream().map(vo -> {
//            UserGroupPO po = new UserGroupPO();
//            BeanUtils.copyProperties(vo, po);
//            return po;
//        }).collect(Collectors.toList());
//
//        objectPageResult.setObjects(poList);
//        return objectPageResult;
//    }

    @Override
    public void saveUserGroup(UserGroupParam param) {
        log.debug("保存用户组参数: {}", param);
        UserGroupPO userGroupPO = new UserGroupPO();
        BeanUtils.copyProperties(param, userGroupPO);
        userGroupRepository.saveUserGroup(userGroupPO);
    }

    @Override
    public PageResult<UserGroupVO> selectPageList(Integer pageNum, Integer pageSize) {
        log.debug("查询用户组列表，页码: {}, 页大小: {}", pageNum, pageSize);
        return userGroupRepository.selectPageList(pageNum, pageSize);
    }

    @Override
    public UserGroupVO selectUserGroupById(Integer id) {
        log.debug("查询用户组详情，用户组ID: {}", id);
        return userGroupRepository.selectUserGroupById(id);
    }


}